package com.city.itis.action;

import java.io.File;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import org.springframework.stereotype.Controller;

import com.city.itis.domain.Member;
import com.city.itis.domain.User;
import com.city.itis.service.UserService;
import com.city.itis.util.Constants;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;


/**
 * 用户Action
 * @author WY
 *
 */

@Controller

public class UserAction extends ActionSupport implements ModelDriven<User>
{

	private static final long serialVersionUID = 1L;	//系统自动生成的版本序列号
	
	private List<User> userList=null; //申明userList对象
	
	private User user=new User();	//定义user对象
	
	private String message=null;	//定义message对象
	
	private String command=null; //用于判断执行的动作
	
	private UserService userService;	//声明userService
	
	private String dealPhoto=null;	//对图片的处理动作
	
	private	File photo; 	//声明上传文件photo 
	
	private String photoFileName=null;	//声明上传文件名称
	
	private String photoContentType;	//声明上传文件类型
	
	private String result=null;	//定义字符串类型变量，用户存放结果信息。
	
	Map<String,Object>map=null;		//申明map对象
	
	
	
	/**
	 * 添加方法
	 * @return
	 */
	public String add()throws Exception 
	{
		user.setPhotoName(photoFileName);	//将上传头像名称设置到用户对象中
		
		int flag=userService.add(user);		//调用用户添加方法
		
		//判断是否添加成功 (flag>0:表示添加成功，flag<0:表示添加失败) 
		if(flag>0)
		{
			//判断上传图片名称是否为null
			if(user.getPhotoName()!=null)
			{
				save_photo();	//调用保存图片方法
				
			}
			return SUCCESS;
		}else
		{
			return ERROR;
		}
		
	}
	
	
	/**
	 * 修改方法
	 * @return
	 */
	public String modify() throws Exception
	{
		
		if(dealPhoto.equals(Constants.MODIFY))
		{
			save_photo();
			user.setPhotoName(photoFileName);
			
		}else if(dealPhoto.equals(Constants.DELETE))
		{
			delete_photo();
			user.setPhotoName(null);
		}else 
		{
			//执行保存图片动作
			user.setPhotoName(user.getPhotoName());
		}
		
		int flag=userService.modify(user);	//调用修改用户方法
		
		
		//判断是否添加成功 (flag>0:表示添加成功，flag<0:表示添加失败) 
		if(flag>0)
		{
			if(Constants.DETAIL.equals(command))
			{
				return Constants.DETAIL;
			}
			return SUCCESS;
		}else
		{
			return ERROR;
		}
		
	}
	
	
	
	/**
	 * 删除方法
	 * @return
	 */
	public String delete()  throws Exception
	{
		int flag=userService.delete(user);	//调用删除用户方法
		
		if(flag>0)
		{
			delete_photo();	//调用删除图片方法
			
			return SUCCESS;
		}else
		{
			return ERROR;
		}
		
	}
	
	/**
	 * 根据用户编号，查询用户信息
	 * @return
	 */
	public String find() throws Exception
	{
		Integer id=user.getId();	//取得用户编号
		
		user=userService.getUserById(id);	//根据用户编号，调用查询用户信息方法。
		
		//判断查询目的（修改、删除、明细）
		if(Constants.MODIFY.equals(command))
		{
			return Constants.MODIFY;
			
		}else if(Constants.DELETE.equals(command)) 
		{
			return Constants.DELETE;
			
		}else
		{
			return NONE;
		}
	}
	
	/**
	 * 用户明细信息
	 * @return
	 * @throws Exception
	 */
	public String detail()throws Exception
	{
		map=ActionContext.getContext().getSession();	//取得Session对象
		
		User u=(User) map.get("login_user");	//从Session中取得会员登陆信息
		if(u!=null)
		{
			user=userService.getUserById(u.getId());	//根据用户编号，调用查询用户信息方法。
			return SUCCESS;
		}
		return ERROR;
		
	}

	/**
	 * 查询所有用户信息
	 * @return
	 */
	public String list()throws Exception 
	{
		map=ActionContext.getContext().getSession();	//取得Session对象
		
		User u=(User) map.get("login_user");	//从Session中取得会员登陆信息
		if(u!=null)
		{
			
		}
		userList=userService.findAllById(u.getId());	//查询所有用户信息
		
		//判断userList是否为null
		if(userList!=null)
		{
			return SUCCESS;
			
		}else 
		{
			return ERROR;
		}
	}
	
	
	 /**
     * 保存图片方法
     */
	public void save_photo()throws Exception
	{
		
		String realPath=ServletActionContext.getServletContext().getRealPath("/upload");	//取得项目中upload文件的路径
		
		//判断上传的文件是否为null
		if(photo!=null)
		{
			
			File saveFile= new File(new File(realPath),photoFileName);	//根据创建文件名称上传的图片名称
			
			//如果upload文件不存在，将会自动创建。
			if(!saveFile.getParentFile().exists())
			{
				saveFile.getParentFile().mkdirs();
			}
			
			FileUtils.copyFile(photo, saveFile);		//调用FileUtils.copyFile方法
		}	
		
	}
	
	/**
	 * 删除图片方法
	 */
	public void delete_photo() throws Exception
	{
		
		String realPath=ServletActionContext.getServletContext().getRealPath("/upload");	//取得项目中upload文件的路径
		
		//判断图片的名字是否为null
		if(user.getPhotoName()!=null)
		{
			
			File deleteFile= new File(new File(realPath),user.getPhotoName());	//根据创建删除文件，名字就是图片的名字。
			
			//如果upload文件不存在，将会自动创建。
			if(!deleteFile.getParentFile().exists())
			{
				deleteFile.getParentFile().mkdirs();
			}
			//判断deleteFile是否为null
			if(deleteFile!=null)
			{
				deleteFile.delete();	//调用delete方法
			}
			
		}
		
		
	}
	
	public String getUserByUserId() throws Exception
	{
		 User u=userService.getUserByUserId(user.getUserId());	//根据用户账号，调用查询用户信息方法。
		 
			 if(u!=null)
			 {
				result="用户账号已经存在，请使用别的账号注册。";
			
			 }else
			 {
				result="恭喜您，该账号可用。";
				
				 
			 }
		    
		 
		return SUCCESS;
	}
	
	//以下都是Get和Set方法
	
	public String getMessage() 
	{
		return message;
	}

	public void setMessage(String message) 
	{
		this.message = message;
	}

	public List<User> getUserList() 
	{
		return userList;
	}

	public void setUserList(List<User> userList) 
	{
		this.userList = userList;
	}

	public User getUser() 
	{
		return user;
	}

	public void setUser(User user) 
	{
		this.user = user;
	}

	@Override
	public User getModel() 
	{
		return user;
	}

	public String getCommand() 
	{
		return command;
	}

	public void setCommand(String command) 
	{
		this.command = command;
	}
	public UserService getUserService() 
	{
		return userService;
	}

	@Resource
	public void setUserService(UserService userService) 
	{
		this.userService = userService;
	}


	public File getPhoto() 
	{
		return photo;
	}


	public void setPhoto(File photo) 
	{
		this.photo = photo;
	}


	public String getPhotoFileName()
	{
		return photoFileName;
	}


	public void setPhotoFileName(String photoFileName)
	{
		this.photoFileName = photoFileName;
	}


	public String getPhotoContentType() 
	{
		return photoContentType;
	}


	public void setPhotoContentType(String photoContentType)
	{
		this.photoContentType = photoContentType;
	}


	public String getDealPhoto()
	{
		return dealPhoto;
	}


	public void setDealPhoto(String dealPhoto) 
	{
		this.dealPhoto = dealPhoto;
	}


	public String getResult() {
		return result;
	}


	public void setResult(String result) {
		this.result = result;
	}

	
}
